#include <iostream>
#include <future>
int Add(int num1, int num2)
{
    // 此时若Add函数先打印, 说明是异步的
    std::cout << "Add(int num1, int num2)" << std::endl;
    return num1 + num2;
}

int main()
{
    // 异步std::launch::async 会创建一个线程去执行任务, 结果通过future获取
    //std::future<int> res = std::async(std::launch::async, Add, 11, 22);

    // 同步std::launch::deferred -- 调用get()的时候才回去执行函数
    std::future<int> res = std::async(std::launch::deferred, Add, 11, 22);
    std::this_thread::sleep_for(std::chrono::seconds(1));

    std::cout << "----------------" << std::endl;
    // get(), 获取结果, 若此时还没有结果就会阻塞
    std::cout << res.get() << std::endl;

    return 0;
}

// g++ async.cpp -o async -lpthread
// rm -rf async


//异步结果
// Add(int num1, int num2)
// ----------------
// 33

// 同步结果
// ----------------
// Add(int num1, int num2)
// 33